#pragma once
#include <Common/platform.h>
#include <assert.h>

namespace shermit {
namespace lbvh {
	/*
	Manager classes containing object data and functions for LBVH construction.
	MUST implement functions: primSize, get, intersect, storeIntersection
	*/
	template<class Obj_t, class BVSOA_t>
	class QueryManager {
	public:
		//using Obj_t;
		GENERAL int primSize() const { assert(false); }

		GENERAL Obj_t get(int idx) const { assert(false); }

		GENERAL static bool intersect(const Obj_t& obj, const BVSOA_t& _bvs, int idx) {
			assert(false);
		}

		GENERAL void storeIntersection(int obj_idx, int lbvh_prim_idx) {
			assert(false);
		}
	};

	/*
	Manager classes containing object data and functions for LBVH queries.
	MUST implement function: primSize, buildBV
	*/
	template<class BVSOA_t>
	class BuildManager {
	public:
		GENERAL int primSize() const { assert(false); }

		GENERAL typename BVSOA_t::bv_struct_t buildBV(int idx) const {
			assert(false);
		}
	};
}
}